package com.example.controller;

import com.example.common.Result;
import com.example.common.PageResult;
import com.example.service.UserBalanceService;
import com.example.util.JwtUserUtil;
import com.example.vo.UserBalanceVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户余额控制器
 */
@RestController
@RequestMapping("/api/user-balance")
@CrossOrigin
public class UserBalanceController {
    
    @Autowired
    private UserBalanceService userBalanceService;

    @Autowired
    private JwtUserUtil jwtUserUtil;
    
    /**
     * 获取当前用户余额信息
     */
    @GetMapping("/my-balance")
    public Result<UserBalanceVO> getMyBalance() {
        return userBalanceService.getMyBalance();
    }
    
    /**
     * 根据用户ID获取余额信息（管理员使用）
     */
    @GetMapping("/{userId}")
    public Result<UserBalanceVO> getUserBalance(@PathVariable Long userId) {
        return userBalanceService.getUserBalance(userId);
    }

    /**
     * 获取所有用户余额列表（管理员使用）
     */
    @GetMapping("/list")
    public Result<List<UserBalanceVO>> getAllUserBalances() {
        return userBalanceService.getAllUserBalances();
    }

    /**
     * 分页查询用户余额（管理员使用）
     */
    @GetMapping("/page")
    public Result<PageResult<UserBalanceVO>> getUserBalancePage(
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int size,
            @RequestParam(required = false) String keyword) {
        return userBalanceService.getUserBalancePage(page, size, keyword);
    }

    /**
     * 初始化用户余额记录
     */
    @PostMapping("/init/{userId}")
    public Result<Void> initUserBalance(@PathVariable Long userId) {
        return userBalanceService.initUserBalance(userId);
    }

    /**
     * 检查用户余额是否充足
     */
    @GetMapping("/check/{userId}")
    public Result<Boolean> checkBalance(@PathVariable Long userId,
                                       @RequestParam String amount) {
        return userBalanceService.checkBalanceByAmount(userId, amount);
    }
    

}
